package com.losalpes.security;

import com.losalpes.persistence.entity.TipoUsuario;
import com.losalpes.persistence.entity.Usuario;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Camilo Alvarez
 */
public class SecurityBean {

    @EJB
    private ISecurityService securityService;
    private String username;
    private String pwd;
    private Usuario usuario;

    public SecurityBean() {
    }

    /**
     * Ejecuta la acciòn de login y redirige a la pàgina correspondiente segpun tipo de cliente
     * @return pàgina que se debe presentar segpun el tipo de cliente.
     */
    public String login() {
        usuario = securityService.login(username, pwd);
        if (usuario == null) {
            return "login";
        } else {
            if (usuario.getTipoUsuario() == TipoUsuario.ADMINISTRADOR) {
                return "administrador";
            } else {
                return "cliente";
            }
        }

    }

    /**
     * obtiene el password digitado
     * @return password
     */
    public String getPwd() {
        return pwd;
    }

    /**
     * modifica el password
     * @param pwd password
     */
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    /**
     * retorna el username del usuario
     * @return username del usuario
     */
    public String getUsername() {
        return username;
    }

    /**
     * modifica el username del usuario
     * @param username 
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * Retorna el usuario que esta logueado
     * @return Usuario retorna el usuario actual
     */
    public Usuario getUsuario() {
        Usuario usuario = new Usuario();
        usuario.setUsuario(FacesContext.getCurrentInstance().getExternalContext().getRemoteUser());
        

        return usuario;
    }

    /**
     * Setea el usuario
     * @param usuario
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    /**
     * Retorna si el usuario actual tiene rol administrador
     * @return boolean si es rol administrador
     */
    public boolean isAdministrator() {
        return FacesContext.getCurrentInstance().getExternalContext().isUserInRole("admin");
        /*if (usuario.getTipoUsuario() == TipoUsuario.ADMINISTRADOR) {
        return true;
        } else {
        return false;
        }*/
    }

     /**
     * Retorna si el usuario actual tiene rol gerente
     * @return boolean si es rol gerente
     */
    public boolean isManager() {
        return FacesContext.getCurrentInstance().getExternalContext().isUserInRole("gerente");
        /*if (usuario.getTipoUsuario() == TipoUsuario.ADMINISTRADOR) {
        return true;
        } else {
        return false;
        }*/
    }

     /**
     * Retorna si el usuario actual tiene rol cliente
     * @return boolean si es rol cliente
     */
    public boolean isClient() {
        return FacesContext.getCurrentInstance().getExternalContext().isUserInRole("cliente");
        /*if (usuario.getTipoUsuario() == TipoUsuario.ADMINISTRADOR) {
        return true;
        } else {
        return false;
        }*/
    }

    /**
     * Retorna si hay un usuario logueado
     * @return boolean si esta logueado
     */
    public boolean isLogedIn() {
        return FacesContext.getCurrentInstance().getExternalContext().getRemoteUser() != null;
    }

    /**
     * Retorna el nombre del usuario que se encuentra logueado
     * @return String nombre del Usuario
     */
    public String getLogedUser() {
        return FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
    }

    /**
     * Cierra la sesion del usuario actual
     * @return String
     */
    public String closeSession() {
        try {
            HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
            session.invalidate();
            FacesContext.getCurrentInstance().getExternalContext().redirect("./menu.jsf");
            FacesContext.getCurrentInstance().responseComplete();
        } catch (IOException ex) {
            Logger.getLogger(SecurityBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}
